#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2025/10/4 9:56
# @Author  : summer
# @Email   : 610658552@qq.com
# @File    : filter_account.py
# @Software: PyCharm
# @Desc    :
import django_filters
from django.core.validators import MinValueValidator

from common.models import Account  # 请确认models模块路径是否正确
from common.utils.common import strip_filter


class AccountFilter(django_filters.FilterSet):
    """Account表过滤器：支持用户名、手机号、状态、管理员类型等过滤"""
    # 用户名：模糊查询（忽略大小写）
    username = django_filters.CharFilter(lookup_expr='icontains', method='filter_username')
    # 手机号：模糊查询（支持部分手机号匹配）
    mobile = django_filters.CharFilter(lookup_expr='icontains', method='filter_mobile')
    # 账号状态：精确匹配（0=禁用，1=启用）
    status = django_filters.NumberFilter(
        field_name='status',
        lookup_expr='exact',
        validators=[MinValueValidator(0)]  # 确保状态值不为负
    )
    # 管理员类型：精确匹配（0=管理员，1=普通用户）
    is_admin = django_filters.NumberFilter(
        field_name='is_admin',
        lookup_expr='exact',
        validators=[MinValueValidator(0)]
    )
    # 所属校区：通过校区ID精确匹配
    school = django_filters.NumberFilter(field_name='school__id', lookup_expr='exact')

    def filter_username(self, queryset, name, value):
        """用户名过滤：去空格后模糊匹配"""
        value = strip_filter(value)
        return queryset.filter(username__icontains=value) if value else queryset

    def filter_mobile(self, queryset, name, value):
        """手机号过滤：去空格后模糊匹配（支持11位手机号或部分号码）"""
        value = strip_filter(value)
        print(f'filter_mobile: {value}')
        return queryset.filter(mobile__icontains=value) if value else queryset

    class Meta:
        model = Account
        # 支持的过滤字段（前端可传这些参数进行筛选）
        fields = ['username', 'mobile', 'status', 'is_admin', 'school', 'is_delete']

    @property
    def qs(self):
        """重写查询集：默认只返回「未删除+非压测」的有效数据"""
        parent_qs = super().qs
        return parent_qs.filter(is_delete=0, pt_flag=0)
